package cn.demoncat.util.web.entity;

import cn.demoncat.util.lang.constant.StringConstant;
import cn.demoncat.util.web.constant.IpConstant;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

/**
 * IP地区
 * 
 * @author 延晓磊
 *
 * @since 2020年5月7日
 */
@Data
public class IpRegion {

	// IP类型：IpConstant.Type
	private String type;
	// 国家
	private String country;
	// 省
	private String province;
	// 市
	private String city;
	
	/**
	 * 未知/错误地址
	 */
	public static final IpRegion UNKNOWN = IpRegion.build(IpConstant.Type.UNKNOWN, IpConstant.COUNTRY_TEXT_UNKNOWN, StringConstant.EMPTY, StringConstant.EMPTY);
	
	/**
	 * 本机/内网
	 */
	public static final IpRegion INTRANET = IpRegion.build(IpConstant.Type.INTRANET, IpConstant.COUNTRY_TEXT_INTRANET, StringConstant.EMPTY, StringConstant.EMPTY);

	/**
	 * 构建
	 *
	 * @param type
	 * @param country
	 * @param province
	 * @param city
	 * @return
	 */
	public static IpRegion build(String type, String country, String province, String city) {
		IpRegion region = new IpRegion();
		region.type = type;
		region.country = country;
		region.province = province;
		region.city = city;
		return region;
	}

	/**
	 * 国内IP
	 * 
	 * @param province
	 * @param city
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年5月7日
	 */
	public static IpRegion buildInland(String province, String city) {
		return IpRegion.build(IpConstant.Type.INLAND, IpConstant.COUNTRY_TEXT_CN, StringUtils.trimToEmpty(province), StringUtils.trimToEmpty(city));
	}
	
	/**
	 * 国外IP
	 * 
	 * @param province
	 * @param city
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年5月7日
	 */
	public static IpRegion buildForeign(String country, String province, String city) {
		return IpRegion.build(IpConstant.Type.FOREIGN, country, StringUtils.trimToEmpty(province), StringUtils.trimToEmpty(city));
	}

	/**
	 * 获取地址名称
	 * 
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年5月7日
	 */
	public String toAddr() {
		if (IpConstant.Type.INLAND.equals(type)) {
			// 国内：省[市]
			if (StringUtils.isBlank(this.city)) {
				// 省/国
				return StringUtils.isBlank(this.province) ? this.country : this.province;
			}else{
				// [省]市
				return StringUtils.isBlank(this.province) ? this.city : (this.province + StringConstant.SPACING + this.city);
			}
		}else {
			// 内网/未知/图外：国[省]
			return StringUtils.isBlank(this.province) ? this.country : this.country + StringConstant.SPACING + this.province;
		}
	}
	

}
